package com.infore.airsupervise.app;

import android.app.Application;
import android.os.Environment;

import com.beardedhen.androidbootstrap.TypefaceProvider;
import com.infore.airsupervise.R;
import com.infore.airsupervise.utils.GFImageLoader;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.videogo.openapi.EZOpenSDK;

import java.io.File;

import cn.finalteam.galleryfinal.CoreConfig;
import cn.finalteam.galleryfinal.FunctionConfig;
import cn.finalteam.galleryfinal.GalleryFinal;
import cn.finalteam.galleryfinal.ThemeConfig;

/**
 * 自定义Application
 *
 * @features: 用于全局应用信息管理
 * @author: Ding Xinlin
 * @date: 2017/03/01 15:36
 */

public class MyApplication extends Application {

    private String AppKey = "1b04413b72a6454da4d0d629c6ff66b1";

    private String appKey_Bugly = "8ff154295e";

    private static MyApplication instance;

    public static MyApplication getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        if (instance == null) {
            instance = this;
        }

        // 初始化应用信息
        AppInfo.init(this);
        // 配置galleryFinal
        initGalleryFinal();
        // 萤石云
        initEZOpenSDK();
        // Android bootstrap
        TypefaceProvider.registerDefaultIconSets();
        // 初始化Bugly
        initBugly();
    }

    /**
     * 配置galleryFinal
     */
    private void initGalleryFinal() {
        //设置主题
        int themeColor = getResources().getColor(R.color.colorPrimary);
        int accentColor = getResources().getColor(R.color.colorAccent);
        ThemeConfig theme = new ThemeConfig.Builder()
                .setTitleBarBgColor(themeColor)
                .setFabNornalColor(accentColor)
                .setFabPressedColor(themeColor)
                .setCheckSelectedColor(accentColor)
                .setCropControlColor(accentColor)
                .build();
        //配置功能
        FunctionConfig functionConfig = new FunctionConfig.Builder()
                .setEnableCamera(true)
                .setEnableEdit(false)
                .setEnableCrop(false)
                .setEnableRotate(false)
                .setCropSquare(false)
                .setEnablePreview(true)
                .build();
        // 配置一个ImageLoader，用于显示图片
        GFImageLoader imageLoader = new GFImageLoader();
        // 设置保存目录
        File takePhotoFolder = new File(Environment.getExternalStorageDirectory(), "/DCIM/" + "AirSupervise/");
        if(!takePhotoFolder.exists()) {
            takePhotoFolder.mkdirs();
        }
        File editPhotoFolder = new File(Environment.getExternalStorageDirectory(), "/DCIM/" + "AirSupervise/Edit");
        if(!editPhotoFolder.exists()) {
            editPhotoFolder.mkdirs();
        }
        CoreConfig coreConfig = new CoreConfig.Builder(this, imageLoader, theme)
                .setFunctionConfig(functionConfig)
                .setTakePhotoFolder(takePhotoFolder)
                .setEditPhotoCacheFolder(editPhotoFolder)
                .build();
        // 初始化
        GalleryFinal.init(coreConfig);
    }

    /**
     * 初始化萤石云
     */
    private void initEZOpenSDK(){
        EZOpenSDK.initLib(this, AppKey);
    }

    /**
     * 配置Bug上报、版本升级
     */
    private void initBugly() {
        /**
         * true表示app启动自动初始化升级模块；
         * false不好自动初始化
         * 开发者如果担心sdk初始化影响app启动速度，可以设置为false
         * 在后面某个时刻手动调用
         */
        Beta.autoInit = true;

        /**
         * true表示初始化时自动检查升级
         * false表示不会自动检查升级，需要手动调用Beta.checkUpgrade()方法
         */
        Beta.autoCheckUpgrade = true;

        /**
         * 升级检查周期设置，此时间段内SDK不重复向后台请求策略
         */
        Beta.upgradeCheckPeriod = 10 * 1000;

        /**
         * 延迟初始化
         */
        Beta.initDelay = 3 * 1000;

        /**
         * 设置通知栏大图标，largeIconId为项目中的图片资源；
         */
        Beta.largeIconId = R.mipmap.wg_icon;

        /**
         * 设置状态栏小图标，smallIconId为项目中的图片资源id;
         */
        Beta.smallIconId = R.mipmap.wg_icon;

        /**
         * 设置更新弹窗默认展示的banner，defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner，默认不设置则展示“loading“;
         */
        Beta.defaultBannerId = R.mipmap.wg_icon;

        /**
         * 设置sd卡的Download为更新资源保存目录;
         * 后续更新资源会保存在此目录，需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
         */
        Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

        /**
         * 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
         */
        Beta.showInterruptedStrategy = true;

        /**
         * 关闭热更新能力
         */
        Beta.enableHotfix = false;

        /**
         * 已经接入Bugly用户改用上面的初始化方法,不影响原有的crash上报功能;
         * init方法会自动检测更新，不需要再手动调用Beta.checkUpdate(),如需增加自动检查时机可以使用Beta.checkUpdate(false,false);
         * 参数1： applicationContext
         * 参数2：appId
         * 参数3：是否开启debug
         */
        Bugly.init(getApplicationContext(), appKey_Bugly, true);
    }
}
